package jp.bsws.common;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import jp.bsws.bean.KeyValueBean;

public class BSWSUtils {

	public static boolean isNotBlankNull(String str){
		if(str == null || "".equals(str)){
			return false;
		}else{
			return true;
		}
	}

	public static boolean isBlankNull(String str){
		if(str == null || "".equals(str)){
			return true;
		}else{
			return false;
		}
	}

	public static boolean isNotZeroNull(Integer inte){
		if(inte == null || inte == 0){
			return false;
		}else{
			return true;
		}
	}

	public static boolean isZeroNull(Integer inte){
		if(inte == null ||  inte == 0){
			return true;
		}else{
			return false;
		}
	}

	public static boolean isZeroNull(List list){
		if(list == null ||  list.size() == 0){
			return true;
		}else{
			return false;
		}
	}

	/**
	 * システム年月を取得
	 * @return
	 */
	public static String getSysDateYm(){

		Calendar date = Calendar.getInstance();

		int iyy = date.get(Calendar.YEAR);
		int imm = date.get(Calendar.MONTH) + 1;  // 0 = 1 月

		String yy = String.valueOf(iyy);
		String mm = hidariUme(String.valueOf(imm),2,"0");

		return yy + mm;
	}

	/**
	 * システム日付を取得
	 * @return
	 */
	public static String getSysDateYmd(){

		Calendar date = Calendar.getInstance();

		int iyy = date.get(Calendar.YEAR);
		int imm = date.get(Calendar.MONTH) + 1;  // 0 = 1 月
		int idd = date.get(Calendar.DATE);

		String yy = String.valueOf(iyy);
		String mm = hidariUme(String.valueOf(imm),2,"0");
		String dd = hidariUme(String.valueOf(idd),2,"0");

		return yy + mm +  dd;
	}

	/**
	 * システム日付月初を取得
	 * @return
	 */
	public static String getSysDateYmdAtGessyo(){

		Calendar date = Calendar.getInstance();

		int iyy = date.get(Calendar.YEAR);
		int imm = date.get(Calendar.MONTH) + 1;  // 0 = 1 月
		int idd = 1;

		String yy = String.valueOf(iyy);
		String mm = hidariUme(String.valueOf(imm),2,"0");
		String dd = hidariUme(String.valueOf(idd),2,"0");

		return yy + mm +  dd;
	}

	/**
	 * システム末日を取得
	 * @return
	 */
	public static String getSysDateYmdAtMatsujitsu(){

		Calendar cal = Calendar.getInstance();

		int iyy = cal.get(Calendar.YEAR);
		int imm = cal.get(Calendar.MONTH) + 1;  // 0 = 1 月
		int idd = cal.getActualMaximum(Calendar.DATE);

		String yy = String.valueOf(iyy);
		String mm = hidariUme(String.valueOf(imm),2,"0");
		String dd = hidariUme(String.valueOf(idd),2,"0");

		return yy + mm +  dd;
	}

	/**
	 * 左埋め
	 * @param moto
	 * @param len
	 * @param okikae
	 * @return
	 */
	public static String hidariUme(String moto, int len, String okikae ){

		for(int i = 0; i < len; i++){
				moto = okikae + moto;
		}

		int mojiLen = moto.length();
		String res = null;
		res =moto.substring(mojiLen - len);

		return res;
	}

//	public static String upOneCnt(String strBefore){
//		String retAfter = null;
//		try{
//			retAfter = String.valueOf(Integer.parseInt(strBefore) + 1);
//		}catch(NumberFormatException nfe){
//			//処理なし
//		}
//
//		return retAfter;
//	}

	/**
	 *  KeyValueBeanのリストを足りない分追加して作成する。
	 * @param str
	 * @return String
	 */
	public static List<KeyValueBean> getKeyValueBeanList(List<KeyValueBean> kvList, int tblLength){
		int size = kvList.size();
		for(int i = 0; i < tblLength - size ; i++){
			kvList.add(new KeyValueBean(null,null));
		}

		return kvList;
	}

	/**
	 *  数字を文字列に変換。nullの場合、nullを返却。
	 * @param str
	 * @return String
	 */
	public static String getStringValueOf( Integer in){
		if(in == null){
			return null;
		}else{
			return String.valueOf(in);
		}
	}

	/**
	 *  数字がｎullの場合0に変換。
	 * @param Integer
	 * @return String
	 */
	public static Integer getZeroInteger( String str){
		if(str == null){
			return new Integer(0);
		}else{
			try{
				return Integer.parseInt(str);
			}catch(NumberFormatException nfe){
				return new Integer(0);
			}
		}
	}

	/**
	 *  検索条件の接続詞を返却
	 * @param str
	 * @return String
	 */
	public static String getWhereAnd( String str){
		if(BSWSUtils.isNotBlankNull(str)){
			return " AND ";
		}else{
			return " WHERE ";
		}
	}

	/**
	 * システム日付から過去5年分未来1年分の年リストを取得
	 * @return
	 */
	public static List<KeyValueBean> getSansyoNenList(){

		List<KeyValueBean> nengetsuList = new ArrayList<KeyValueBean>();


		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.YEAR,1);

		for(int i = 0; i < 6; i++){

			int iyy = cal.get(Calendar.YEAR);

			String yy = String.valueOf(iyy);

			KeyValueBean kv = new KeyValueBean();
			kv.setKey(yy);
			kv.setValue(yy + "年");
			nengetsuList.add(kv);

			cal.add(Calendar.YEAR,-1);
		}

		return nengetsuList;
	}

	/**
	 * システム日付から過去2年分未来１ヶ月の年月リストを取得
	 * @return
	 */
	public static List<KeyValueBean> getSansyoNengetsuList(){

		List<KeyValueBean> nengetsuList = new ArrayList<KeyValueBean>();


		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.MONTH,1);

		for(int i = 0; i < 24; i++){

			int iyy = cal.get(Calendar.YEAR);
			int imm = cal.get(Calendar.MONTH) + 1;  // 0 = 1 月

			String yy = String.valueOf(iyy);
			String mm = hidariUme(String.valueOf(imm),2,"0");

			KeyValueBean kv = new KeyValueBean();
			kv.setKey(yy+mm);
			kv.setValue(yy + "年" + mm + "月");
			nengetsuList.add(kv);

			cal.add(Calendar.MONTH,-1);
		}

		return nengetsuList;
	}

	/**
	 *  数字がｎullの場合0に変換。
	 * @param Integer
	 * @return Integer
	 */
	public static Integer getZeroInteger( Integer in){
		if(in == null){
			return new Integer(0);
		}else{
			return in;
		}
	}

	/**
	 * 日付の妥当性チェックを行います。
	 * @param strDate チェック対象の文字列
	 * @return 存在する日付の場合true
	 */
	public static boolean checkDate(String strYMD) {
	    if (strYMD == null || strYMD.length() != 8) {
	    	return false;
	    }
	    Calendar cal = Calendar.getInstance();
	    cal.setLenient(false);
	    int iyy = Integer.parseInt(strYMD.substring(0,4));
	    int imm = Integer.parseInt(strYMD.substring(4,6));
	    int idd = Integer.parseInt(strYMD.substring(6,8));
	    cal.set(iyy, imm - 1, idd);
	    try {
	    	Date date = cal.getTime();
	        return true;
	    } catch (Exception e) {
	        return false;
	    }
	}

	/**
     * 数値チェック
     * @param str チェック文字列
     * @return 引数の文字列が数値である場合 true を返す。
     */
    public static boolean checkNumber(String str) {
        try {
            Double.parseDouble(str);
            return true;
        } catch(NumberFormatException e) {
            return false;
        }
    }
}
